/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.controlador;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import sv.com.intesal.clases.abstracts.ControladorAbstract;
import sv.com.intesal.compra.bean.Proveedor;
import sv.com.intesal.compra.sql.SQLProveedor;

/**
 *
 * @author ejerez
 */
public class ProveedorControlador extends ControladorAbstract {

    private class Filtro {

        public String getFiltro_TipoProveedor(Proveedor p) {
            try {
                String var_filtro = "";

                if (p.getEstado_filtro_tp() == true) {
                    var_filtro = " and tp.codigo_tp=" + p.getCodigo_tp() + " ";
                }
                return var_filtro;
            } catch (Exception e) {
                return "";
            }
        }

        public String getFiltro_Pais(Proveedor p) {
            try {
                String var_filtro = "";

                if (p.getEstado_filtro_p() == true) {
                    var_filtro = " and pa.codigo_p=" + p.getCodigo_pais_p() + " ";
                }
                return var_filtro;
            } catch (Exception e) {
                return "";
            }
        }

        public String getFiltro_Departamento(Proveedor p) {
            try {
                String var_filtro = "";

                if (p.getEstado_filtro_d() == true) {
                    var_filtro = " and d.codigo_d=" + p.getCodigo_d() + " ";
                }
                return var_filtro;
            } catch (Exception e) {
                return "";
            }
        }

        public String getFiltro_Municipio(Proveedor p) {
            try {
                String var_filtro = "";

                if (p.getEstado_filtro_m() == true) {
                    var_filtro = " and m.codigo_m=" + p.getCodigo_m() + " ";
                }
                return var_filtro;
            } catch (Exception e) {
                return "";
            }
        }

        public String getFiltro_Estado(Boolean var_boolean) {
            try {
                String var_filtro = "";

                if (var_boolean == true) {
                    var_filtro = " and p.estado_p='A' ";
                }
                return var_filtro;
            } catch (Exception e) {
                return "";
            }
        }
    }

    public void insert(Proveedor p) throws Exception {
        try {
            super.setPreparedStatement(SQLProveedor.insert);
            super.ps.setInt(1, p.getCodigo_m());
            super.ps.setInt(2, p.getCodigo_tp());
            super.ps.setString(3, p.getEmpresa_p());
            super.ps.setString(4, p.getContacto_p());
            super.ps.setString(5, p.getDireccion_p());
            super.ps.setString(6, p.getOtra_informacion_p());
            super.ps.setString(7, p.getTelefono_p());
            super.ps.setString(8, p.getRegistro_p());
            super.ps.setString(9, p.getNit_p());
            super.ps.setString(10, p.getGiro_p());
            super.ps.setDouble(11, p.getLimite_credito_p());
            super.ps.setString(12, p.getEmail_p());
            super.ps.setInt(13, p.getPlazo_p());
            super.ps.setString(14, super.v.getEstado(p.getAplicar_percepcion_filtro_p()));
            super.ps.setString(15, super.v.getEstado(p.getEstado_filtro_p()));
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public void update(Proveedor p) throws Exception {
        try {
            super.setPreparedStatement(SQLProveedor.update);
            super.ps.setInt(1, p.getCodigo_m());
            super.ps.setInt(2, p.getCodigo_tp());
            super.ps.setString(3, p.getEmpresa_p());
            super.ps.setString(4, p.getContacto_p());
            super.ps.setString(5, p.getDireccion_p());
            super.ps.setString(6, p.getOtra_informacion_p());
            super.ps.setString(7, p.getTelefono_p());
            super.ps.setString(8, p.getRegistro_p());
            super.ps.setString(9, p.getNit_p());
            super.ps.setString(10, p.getGiro_p());
            super.ps.setDouble(11, p.getLimite_credito_p());
            super.ps.setString(12, p.getEmail_p());
            super.ps.setInt(13, p.getPlazo_p());
            super.ps.setString(14, super.v.getEstado(p.getAplicar_percepcion_filtro_p()));
            super.ps.setString(15, super.v.getEstado(p.getEstado_filtro_p()));
            super.ps.setInt(16, p.getCodigo_p());
            super.ps.executeUpdate();
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    public List<Proveedor> getProveedores() throws Exception {
        List<Proveedor> lista = new ArrayList<Proveedor>();
        try {

            this.getExecuteQuery(SQLProveedor.getProveedores);
            while (super.rs.next()) {
                lista.add(this.getProveedor(super.rs));
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }

    private Proveedor getProveedor(ResultSet rs) throws Exception {
        try {
            Proveedor p = new Proveedor();
            p.setCodigo_p(rs.getInt("codigo_p"));
            p.setEmpresa_p(rs.getString("empresa_p"));
            p.setContacto_p(rs.getString("contacto_p"));
            p.setDireccion_p(rs.getString("direccion_p"));
            p.setOtra_informacion_p(rs.getString("otra_informacion_p"));
            p.setTelefono_p(rs.getString("telefono_p"));
            p.setRegistro_p(rs.getString("registro_p"));
            p.setNit_p(rs.getString("nit_p"));
            p.setGiro_p(rs.getString("giro_p"));
            p.setLimite_credito_p(rs.getDouble("limite_credito_p"));
            p.setEmail_p(rs.getString("email_p"));
            p.setPlazo_p(rs.getInt("plazo_p"));

            p.setAplicar_percepcion_p(rs.getString("aplicar_percepcion_p"));
            p.setAplicar_percepcion_filtro_p(v.getEstado(rs.getString("aplicar_percepcion_p")));

            p.setEstado_p(rs.getString("estado_p"));
            p.setEstado_filtro_p(v.getEstado(rs.getString("estado_p")));

            /*TIPO_PROVEEDOR*/
            p.setCodigo_tp(rs.getInt("codigo_tp"));
            p.setNombre_tp(rs.getString("nombre_tp"));

            /*PAIS*/
            p.setCodigo_pais_p(rs.getInt("codigo_pais_p"));
            p.setCodigo_p2(rs.getInt("codigo_pais_p"));
            p.setNombre_p(rs.getString("nombre_p"));

            /*DEPARTAMENTO*/
            p.setCodigo_d(rs.getInt("codigo_d"));
            p.setCodigo_d2(rs.getInt("codigo_d"));
            p.setNombre_d(rs.getString("nombre_d"));

            /*MUNICIPIO*/
            p.setCodigo_m(rs.getInt("codigo_m"));
            p.setCodigo_m2(rs.getInt("codigo_m"));
            p.setNombre_m(rs.getString("nombre_m"));

            return p;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public List<Proveedor> getConsultaProveedoresActivos(Proveedor p) throws Exception {
        List<Proveedor> lista = new ArrayList<Proveedor>();
        Filtro f = new Filtro();

        try {

            String sql = SQLProveedor.Consulta.getProveedores;
            sql += f.getFiltro_Pais(p) + f.getFiltro_Departamento(p) + f.getFiltro_Municipio(p) + f.getFiltro_TipoProveedor(p) + f.getFiltro_Estado(Boolean.TRUE);
            sql += SQLProveedor.Consulta.getProveedoresOrderBy;

            this.getExecuteQuery(sql);
            while (super.rs.next()) {
                lista.add(this.getProveedor(super.rs));
            }

            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        } finally {
            super.setCloseConexion();
        }
    }
}
